﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpDelegateLambda
{
    /// <summary>
    /// 
    /// 系统定义，我们可以直接使用
    /// 两种方法：一种是没有返回值的Action<args>,一种是有返回值Func<args>
    /// 1.Action<>在多线程中用的非常多
    /// 2.Func<>在扩展方法中用的非常多
    /// 
    /// 
    /// 
    /// </summary>
    public class ActionAndFuncBase
    {
        public void Test1()
        {
            Action<string> action1 = (name) => Console.WriteLine($"欢迎{{name}}参加课程学习");
            Action<string,string> action2 = (name,course) => Console.WriteLine($"欢迎{name}]参加[{course}]课程学习");

            action1("小智");
            action2("小红", "上位机");
        }

        public void Test2()
        {
            //【1】Func关联具体方法
            Func<int, int, double> myFunc1 = Add;
            Console.WriteLine("方法的返回结果"+myFunc1(10,20));

            //Func直接使用Lambda表达式
            Func<int,int,double> myFunc2 = (a,b) => a + b;
            Console.WriteLine("方法的返回结果" + myFunc2(10, 30));

        }

        public double Add(int a, int b)
        {
            return a + b;
        }

    }
}
